在學到 PE 中的內容後,來寫一個的 PE解析器
吧。
開源程式碼 : https://github.com/aaaddress1/Windows-APT-Warfare
聲明 : 本文使用書中程式碼作為研究對象, 並接受 GNU 3.0
授權條款。
程式連接
這個程式是逆向工程大師馬聖豪的作品,我在學習的時候使用了這份程式來學習 PE 結構,我認為效果十分顯著。所以打算分析這個程式並做功能上的講解。
使用參數的方式得到目標檔案的位置,然後讀入檔案。
可以用 fseek
來操縱指標位置來取得文件大小。
建立兩個指標指向 Header
,這些物件定義包含在 <winnt.h>
( 使用 <windows.h>
就含在裡面了 )。
DOS Header
的位置就是檔案的位置。
NT Header
的位置偏移量包含在 DOS Header
的 0x3C
位置,位在結構中 .e_lfanew
。
所以實際位置是 DOS Header
的位置加上偏移量
。
可以利用魔術碼
來確定 Header 是否正確。
各自的常數應為 IMAGE_DOS_SIGNATURE
跟 IMAGE_NT_SIGNATURE
Option Header
當有了 NT Header
後,就可以透過她來取得裡面的 File
跟 Option Header
。
由於 File Header
跟 Option Header
操作差不多,這邊演示 Option Header
。
然後就可以存取 Header
裡面的資料並輸出。
Section Header
所有區塊因為 Section Header
會緊連在 NT Header
之後,所以它的位置就是 NT Header + sizeof( NT Header )
然後就要來遍歷 Section
中的區塊資料。區塊數量是 NT Header
中的 NumberOfSections
,就可以由 0 遍歷到最後區塊。
大功告成,那會了這些可以做甚麼呢?
這些知識是逆向工程的基礎,可以透過 PE 解析來得知這份檔案想做甚麼,判定是不是想壞壞。